package com.hello.system.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 用户举报投诉对象 reports
 * 
 * @author hello
 * @date 2025-10-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Reports extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 举报ID（主键） */
    private Long reportId;

    /** 举报类型（如user-用户、comment-评论、activity-活动、shop-店铺等） */
    @Excel(name = "举报类型", readConverterExp = "如=user-用户、comment-评论、activity-活动、shop-店铺等")
    private String reportType;

    /** 被举报对象ID（根据reportType关联不同表） */
    @Excel(name = "被举报对象ID", readConverterExp = "根=据reportType关联不同表")
    private Long targetId;

    /** 举报原因详细描述 */
    @Excel(name = "举报原因详细描述")
    private String reportReason;

    /** 举报证据图片URL列表（JSON数组） */
    @Excel(name = "举报证据图片URL列表", readConverterExp = "J=SON数组")
    private String reportImages;

    /** 举报分类（JSON，如违法违规、垃圾广告、色情低俗等） */
    @Excel(name = "举报分类", readConverterExp = "J=SON，如违法违规、垃圾广告、色情低俗等")
    private String reportCategory;

    /** 举报标签（JSON数组） */
    @Excel(name = "举报标签", readConverterExp = "J=SON数组")
    private String reportTags;

    /** 举报时所在位置 */
    @Excel(name = "举报时所在位置")
    private String reportLocation;

    /** 举报位置坐标（经纬度） */
    @Excel(name = "举报位置坐标", readConverterExp = "经=纬度")
    private String reportCoordinates;

    /** 举报时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "举报时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date reportTime;

    /** 举报人用户ID */
    @Excel(name = "举报人用户ID")
    private Long reporterId;

    /** 举报人手机号 */
    @Excel(name = "举报人手机号")
    private String reporterPhone;

    /** 举报人用户名 */
    @Excel(name = "举报人用户名")
    private String reporterUsername;

    /** 举报人头像URL */
    @Excel(name = "举报人头像URL")
    private String reporterAvatar;

    /** 被举报的用户ID（如果是举报用户） */
    @Excel(name = "被举报的用户ID", readConverterExp = "如=果是举报用户")
    private Long targetUserId;

    /** 被举报的用户名 */
    @Excel(name = "被举报的用户名")
    private String targetUsername;

    /** 被举报的用户头像URL */
    @Excel(name = "被举报的用户头像URL")
    private String targetAvatar;

    /** 处理状态（0-待处理，1-处理中，2-已处理，3-已驳回） */
    @Excel(name = "处理状态", readConverterExp = "0=-待处理，1-处理中，2-已处理，3-已驳回")
    private Integer processStatus;

    /** 处理结果说明 */
    @Excel(name = "处理结果说明")
    private String processResult;

    /** 处理完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "处理完成时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date processTime;

    /** 处理人用户ID */
    @Excel(name = "处理人用户ID")
    private Long processorId;

    /** 举报状态（JSON，如是否有效、是否公开等） */
    @Excel(name = "举报状态", readConverterExp = "J=SON，如是否有效、是否公开等")
    private String status;

    /** 额外扩展数据（JSON格式） */
    @Excel(name = "额外扩展数据", readConverterExp = "J=SON格式")
    private String extraData;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    public void setReportId(Long reportId) 
    {
        this.reportId = reportId;
    }

    public Long getReportId() 
    {
        return reportId;
    }
    public void setReportType(String reportType) 
    {
        this.reportType = reportType;
    }

    public String getReportType() 
    {
        return reportType;
    }
    public void setTargetId(Long targetId) 
    {
        this.targetId = targetId;
    }

    public Long getTargetId() 
    {
        return targetId;
    }
    public void setReportReason(String reportReason) 
    {
        this.reportReason = reportReason;
    }

    public String getReportReason() 
    {
        return reportReason;
    }
    public void setReportImages(String reportImages) 
    {
        this.reportImages = reportImages;
    }

    public String getReportImages() 
    {
        return reportImages;
    }
    public void setReportCategory(String reportCategory) 
    {
        this.reportCategory = reportCategory;
    }

    public String getReportCategory() 
    {
        return reportCategory;
    }
    public void setReportTags(String reportTags) 
    {
        this.reportTags = reportTags;
    }

    public String getReportTags() 
    {
        return reportTags;
    }
    public void setReportLocation(String reportLocation) 
    {
        this.reportLocation = reportLocation;
    }

    public String getReportLocation() 
    {
        return reportLocation;
    }
    public void setReportCoordinates(String reportCoordinates) 
    {
        this.reportCoordinates = reportCoordinates;
    }

    public String getReportCoordinates() 
    {
        return reportCoordinates;
    }
    public void setReportTime(Date reportTime) 
    {
        this.reportTime = reportTime;
    }

    public Date getReportTime() 
    {
        return reportTime;
    }
    public void setReporterId(Long reporterId) 
    {
        this.reporterId = reporterId;
    }

    public Long getReporterId() 
    {
        return reporterId;
    }
    public void setReporterPhone(String reporterPhone) 
    {
        this.reporterPhone = reporterPhone;
    }

    public String getReporterPhone() 
    {
        return reporterPhone;
    }
    public void setReporterUsername(String reporterUsername) 
    {
        this.reporterUsername = reporterUsername;
    }

    public String getReporterUsername() 
    {
        return reporterUsername;
    }
    public void setReporterAvatar(String reporterAvatar) 
    {
        this.reporterAvatar = reporterAvatar;
    }

    public String getReporterAvatar() 
    {
        return reporterAvatar;
    }
    public void setTargetUserId(Long targetUserId) 
    {
        this.targetUserId = targetUserId;
    }

    public Long getTargetUserId() 
    {
        return targetUserId;
    }
    public void setTargetUsername(String targetUsername) 
    {
        this.targetUsername = targetUsername;
    }

    public String getTargetUsername() 
    {
        return targetUsername;
    }
    public void setTargetAvatar(String targetAvatar) 
    {
        this.targetAvatar = targetAvatar;
    }

    public String getTargetAvatar() 
    {
        return targetAvatar;
    }
    public void setProcessStatus(Integer processStatus) 
    {
        this.processStatus = processStatus;
    }

    public Integer getProcessStatus() 
    {
        return processStatus;
    }
    public void setProcessResult(String processResult) 
    {
        this.processResult = processResult;
    }

    public String getProcessResult() 
    {
        return processResult;
    }
    public void setProcessTime(Date processTime) 
    {
        this.processTime = processTime;
    }

    public Date getProcessTime() 
    {
        return processTime;
    }
    public void setProcessorId(Long processorId) 
    {
        this.processorId = processorId;
    }

    public Long getProcessorId() 
    {
        return processorId;
    }
    public void setStatus(String status) 
    {
        this.status = status;
    }

    public String getStatus() 
    {
        return status;
    }
    public void setExtraData(String extraData) 
    {
        this.extraData = extraData;
    }

    public String getExtraData() 
    {
        return extraData;
    }
    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }
    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("reportId", getReportId())
            .append("reportType", getReportType())
            .append("targetId", getTargetId())
            .append("reportReason", getReportReason())
            .append("reportImages", getReportImages())
            .append("reportCategory", getReportCategory())
            .append("reportTags", getReportTags())
            .append("reportLocation", getReportLocation())
            .append("reportCoordinates", getReportCoordinates())
            .append("reportTime", getReportTime())
            .append("reporterId", getReporterId())
            .append("reporterPhone", getReporterPhone())
            .append("reporterUsername", getReporterUsername())
            .append("reporterAvatar", getReporterAvatar())
            .append("targetUserId", getTargetUserId())
            .append("targetUsername", getTargetUsername())
            .append("targetAvatar", getTargetAvatar())
            .append("processStatus", getProcessStatus())
            .append("processResult", getProcessResult())
            .append("processTime", getProcessTime())
            .append("processorId", getProcessorId())
            .append("status", getStatus())
            .append("extraData", getExtraData())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
